package com.ks.winterwarmimage.utils;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;

import java.io.Serializable;
import java.util.Map;

public class ActivityUtil {
    /**
     * 打开一个新的窗口
     * @param context       当前活动上下文
     * @param ActivityClass 打开的新窗体类
     */
    public static void startActivity(Context context, Class ActivityClass) {
        //打开一个新的窗口
        Intent intent=new Intent(context, ActivityClass);
        context.startActivity(intent);
    }
    /**
     * 打开一个新的窗口
     * @param context       当前活动上下文
     * @param ActivityClass 打开的新窗体类
     * @param msgMap           要传递给新Activity的消息列表
     */
    public static void startActivity(Context context, Class ActivityClass, Map<String, Object> msgMap) {
        Intent intent=new Intent(context, ActivityClass);
        if(msgMap!=null) {
            intent = setIntent(intent, msgMap);
        }
        context.startActivity(intent);
    }
    /**
     * 打开一个新的窗口
     * @param context       当前活动上下文
     * @param ActivityClass 打开的新窗体类
     * @param msg           要传递给新窗体的消息
     */
    public static void startActivity(Context context, Class ActivityClass, Bundle msg) {
        Intent intent=new Intent(context, ActivityClass);
        intent.putExtras(msg);
        context.startActivity(intent);
    }
    /**
     * 打开一个新窗体
     * @param context 上下文
     * @param ActivityClass 打开的新窗体类
     * @param name 传递的消息名称
     * @param value 传递的继承Serializable的对象
     */
    public static void startActivity(Context context, Class ActivityClass, String name, Serializable value) {
        Intent intent=new Intent(context, ActivityClass);
        intent.putExtra(name,value);
        context.startActivity(intent);
    }

    /**
     * 打开一个新的窗口
     * @param activity       当前活动对象
     * @param ActivityClass 打开的新窗体类
     * @param requestCode 请求代码
     */
    public static void startActivity(Activity activity, Class ActivityClass, int requestCode) {
        //打开一个新的窗口
        Intent intent=new Intent( activity,ActivityClass);
        activity.startActivityForResult(intent,requestCode);
    }
    /**
     * 打开一个新的窗口
     * @param activity          当前活动上下文
     * @param ActivityClass    打开的新窗体类
     * @param requestCode      请求代码
     * @param msgMap           要传递给新Activity的消息列表
     */
    public static void startActivity(Activity activity, Class ActivityClass, int requestCode, Map<String, Object> msgMap) {
        Intent intent=new Intent(activity, ActivityClass);
        if(msgMap!=null) {
            intent=setIntent(intent,msgMap);
        }
        activity.startActivityForResult(intent,requestCode);
    }
    /**
     * 打开一个新的窗口
     * @param activity       当前活动对象
     * @param ActivityClass  打开的新窗体类
     * @param requestCode    请求代码
     * @param msg            要传递给新窗体的消息
     */
    public static void startActivity(Activity activity, Class ActivityClass, int requestCode, Bundle msg) {
        Intent intent=new Intent(activity, ActivityClass);
        if(msg!=null)
          intent.putExtras(msg);
        activity.startActivityForResult(intent,requestCode);
    }
    /**
     * 打开一个新窗体
     * @param activity 当前活动对象
     * @param ActivityClass 打开的新窗体类
     * @param requestCode    请求代码
     * @param name 传递的消息名称
     * @param value 传递的继承Serializable的对象
     */
    public static void startActivity(Activity activity, Class ActivityClass, int requestCode, String name, Serializable value) {
        Intent intent=new Intent(activity, ActivityClass);
        intent.putExtra(name,value);
        activity.startActivityForResult(intent,requestCode);
    }

    /***********************************私有函数*********************************/
    /**
     * 给Intent 设置要传输的数据
     * @param  oleIntent
     * @param map
     * @return
     */
    private static Intent setIntent(Intent oleIntent, Map<String, Object> map){
        if(oleIntent!=null && map!=null) {
            for (Map.Entry<String, Object> tempMap : map.entrySet()) {
                //单数据类型
                if (tempMap.getValue() instanceof Integer) {
                    oleIntent.putExtra(tempMap.getKey(), (int) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Short) {
                    oleIntent.putExtra(tempMap.getKey(), (short) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Long) {
                    oleIntent.putExtra(tempMap.getKey(), (long) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Float) {
                    oleIntent.putExtra(tempMap.getKey(), (float) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Double) {
                    oleIntent.putExtra(tempMap.getKey(), (double) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Boolean) {
                    oleIntent.putExtra(tempMap.getKey(), (boolean) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Byte) {
                    oleIntent.putExtra(tempMap.getKey(), (byte) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Character) {
                    oleIntent.putExtra(tempMap.getKey(), (char) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Bundle) {
                    oleIntent.putExtra(tempMap.getKey(), (Bundle) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Parcelable) {
                    oleIntent.putExtra(tempMap.getKey(), (Parcelable) tempMap.getValue());
                } else if (tempMap.getValue() instanceof String) {
                    oleIntent.putExtra(tempMap.getKey(), (String) tempMap.getValue());
                } else if (tempMap.getValue() instanceof CharSequence) {
                    oleIntent.putExtra(tempMap.getKey(), (CharSequence) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Serializable) {
                    oleIntent.putExtra(tempMap.getKey(), (Serializable) tempMap.getValue());
                    //数组数据类型
                } else if (tempMap.getValue() instanceof Integer[]) {
                    oleIntent.putExtra(tempMap.getKey(), (int[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Short[]) {
                    oleIntent.putExtra(tempMap.getKey(), (short[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Long[]) {
                    oleIntent.putExtra(tempMap.getKey(), (long[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Float[]) {
                    oleIntent.putExtra(tempMap.getKey(), (float[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Double[]) {
                    oleIntent.putExtra(tempMap.getKey(), (double[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Boolean[]) {
                    oleIntent.putExtra(tempMap.getKey(), (boolean[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Byte[]) {
                    oleIntent.putExtra(tempMap.getKey(), (byte[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Character[]) {
                    oleIntent.putExtra(tempMap.getKey(), (char[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Bundle[]) {
                    oleIntent.putExtra(tempMap.getKey(), (Bundle[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Parcelable[]) {
                    oleIntent.putExtra(tempMap.getKey(), (Parcelable[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof String[]) {
                    oleIntent.putExtra(tempMap.getKey(), (String[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof CharSequence[]) {
                    oleIntent.putExtra(tempMap.getKey(), (CharSequence[]) tempMap.getValue());
                } else if (tempMap.getValue() instanceof Serializable[]) {
                    oleIntent.putExtra(tempMap.getKey(), (Serializable[]) tempMap.getValue());
                }
            }
        }
        return oleIntent;
    }
}
